#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#include <string.h>
#include "arvore_sa.h"

/* NAO ALTERAR ESTE ARQUIVO */

int main() {
   /* ----------------------------------------------------------------------
      Declarações e início para verificação do uso da memória dinâmica.
      ---------------------------------------------------------------------- */
   struct mallinfo info = mallinfo();
   int MemDinInicial = info.uordblks, MemDinFinal;
   /* ---------------------------------------------------------------------- */
   
   int acao;
   char nome_origem[64];
   char nome_destino[64];
   char produto[64];
   FILE *fp = stdin; 
   ArvoreSA *arv;

   arv = cria_arvore_sa();	//cria arvore de semi afunilamento

   for (acao=getc(fp); acao!=EOF; acao=getc(fp)) {
	switch ( acao ) {
        case 'i':
	  getc(fp);
  	  if (fgets(nome_origem,64,fp) == NULL) {		//le cidade de origem
 	    fprintf(stderr, "Erro ao ler nome de cidade de origem.\n");
	    exit(-1);
	  }
  	  if (fgets(nome_destino,64,fp) == NULL) {		//le cidade de destino
 	    fprintf(stderr, "Erro ao ler nome de cidade de destino.\n");
	    exit(-1);
	  }
  	  if (fgets(produto,64,fp) == NULL)  {		//le produto
 	    fprintf(stderr, "Erro ao ler nome de produto.\n");
	    exit(-1);
	  }
	  nome_origem[strlen(nome_origem)-1]=nome_destino[strlen(nome_destino)-1]=produto[strlen(produto)-1]='\0'; //exclui \n das strings
	  arv = insere_arvore_sa (arv, nome_origem, nome_destino, produto);	//chama operacao de insersao na arvore
	  break;
        case 'c':
	  getc(fp);
  	  if (fgets(produto,64,fp) == NULL)  {
 	    fprintf(stderr, "Erro ao ler nome de produto.\n");
	    exit(-1);
	  }
	  produto[strlen(produto)-1]='\0'; //exclui \n da string
	  consulta_arvore_sa (arv, produto);	//chama operacao de consulta na arvore
	  break;
        case ' ':
        case '\n':
        case '\t':
	  break;
        default:
	  fprintf(stdout, "Opção desconhecida: %c\n", acao);
	  break;
     	}
   } 

   libera_arvore_sa(&arv); 	//libera memoria

   /* --------------------------------------------------------------------- */
   /* Verificação final do uso da memória dinâmica                          */
   /* --------------------------------------------------------------------- */
   info = mallinfo();
   MemDinFinal = info.uordblks;
   if (MemDinInicial!=MemDinFinal)
      printf("\n\nMemoria dinamica nao foi totalmente liberada (%d, %d)\n",
	     MemDinInicial,MemDinFinal);
   /* --------------------------------------------------------------------- */
   return 0;
}
